iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

Hello Flask

昨天我們成功運作了我們第一個程式了

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

下面我簡單介紹一下這些程式碼分別是甚麼

app = Flask(__name__)
#初始化時傳入的 __name__ 參數,代表當前模組的名稱。
#是固定用法,這可以讓 Flask 知道在哪裡尋找資源。
@app.route("/")
#Flask會利用route()裝飾器來告訴Flask什麼URL應該觸發我們的函數。
def hello_world():
    return "<p>Hello, World!</p>"
#該函數返回我們想要在用戶瀏覽器中顯示的消息。默認內容類型是 HTML,因此字符串中的 HTML 將由瀏覽器呈現,也一定是一個要執行的function,透過這樣子的設置,當你連接到’/'的時候,路由就知道要執行後面的function了。

在日後如果要執行也可以在程式碼的最後增加

if __name__ == '__main__':
    app.run(debug=True)
# run是Flask內建的開發伺服器,在開發過程中可以通過run來快速啟動伺服器
# debug=True可以幫助我們在修改的時候可以快速地發現錯誤或自動重新加載

提到debug=True,我們也可以在額外寫一個config檔案專門儲存這些資訊,這個在日後我們也會提到喔。
在Flask的run函數中除了debug還有很多參數是可以選擇的

參數 功能
host 伺服器要監聽的主機名,默認是127.0.0.1(localhost),如果設定為0.0.0.0則允許公網訪問
port 伺服器運行的端口號,莫認為5000
debug 啟用debug模式,當程式碼有修改時伺服器會自動重載莫認為false。
options 直接傳遞給底層的WSGI伺服器

route

在Flask的route()是可以允許傳遞參數的,他支援的參數型別有下面這幾種

Type Description
string 能接受任何不帶斜線的文本,是默認的選項
int 只能接受整數
float 跟int類似,但可以接受浮點數
path 跟string類似,但可以接受斜線
uuid 接受uuid字符串

使用變數指定動態路由:

@app.route('/user/<username>') 
def show_user_profile(username):
    return f'User {username}\'s profile'
# 可以看到他將網址上的arbin做為參數傳到網頁上顯示出來

https://ithelp.ithome.com.tw/upload/images/20230919/20159225i3R1owCsJi.png

也可以根據傳入的值進行運算

@app.route('/add/<int:a>/<int:b>')
def add(a, b):
    return f'{a} + {b} = {a+b}'

https://ithelp.ithome.com.tw/upload/images/20230919/20159225DmCbqOskYJ.png

不同的請求方法

在 Flask 中我們可以透過 methods 參數指定 route 要支援的請求方法:

@app.route('/login', methods=['GET', 'POST'])
def login():
  pass

這樣這個路由就可以處理 GET 和 POST 請求。
通常我們會根據 request.method 來區分請求方法:

@app.route('/login', methods=['GET', 'POST'])
def login():
  if request.method == 'POST':
    # 處理 POST 請求,例如從表單接收資料
    
  else:
    # 處理 GET 請求,例如返回登入頁面

透過這些簡單的範例,我們可以了解一些 Flask 的簡單操作了。


上一篇
[Day 2] Flask的簡單開發環境設定
下一篇
[Day 4] Flask 模板及靜態文件
系列文
從開始到放棄的Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言